The implementation of practical functional programming languages